<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%
'******************************************************************************************
'#                  Openasp CMS software opensource                                       #
'******************************************************************************************
'#      Copyright (C) Luca Becchetti, Broken Ice Interactive                              #
'#                                                                                        #
'# Questo software è gratuito, è possibile ridistribuire e modificare il prodotto         #
'# rispettando i termini della GNU General Public License pubblicata dalla Free           #
'# Software Foundation, si fa riferimento alla versione attuale e a tutte le versioni.    #
'# future                                                                                 #
'#                                                                                        #
'# Il software viene distribuito con lo scopo di essere utile e di aiutare nella          #
'# realizzazione di un sito web, non ci assiumiamo nessuna responsabilità per             #
'# eventuali malfunzionamenti o problemi provenienti dal programma.                       #
'#                                                                                        #
'# E' assolutamente vietato eliminare ogni riferimento di copyright sia all'interno del   #
'# del codice sorgente sia quelli visivi nel progetto.                                    #
'#                                                                                        #
'# Una copia della licenza GNU GPL è rilasciata nel pacchetto di istallazione del         #
'# software.                                                                              #
'#                                                                                        #
'# Per supporto visita il nostro sito ufficiale                                           #
'# http://www.openasp.it                                                                  #
'#                                                                                        #
'#                                                                                        #
'******************************************************************************************
'
'******************************************************************************************
'#               O P E N A S P    K E R N E L    V E R S I O N E    3 . 0                 #
'******************************************************************************************
lngTimer = Timer 	'Variabile per il test della velocità della pagina
%>
<!--#include file="OPENASP_VERS.INC"-->
<%
    '            ___________________________________________
    '           /                                           \
    '---------- |  IMPEDISCO LA MEMORIZZAZIONE NELLA CACHE   |----------------------------------+
    '           \___________________________________________/                    
    Server.ScriptTimeout 		= 90
    Response.Buffer 	 		= True
    Response.Expires 			= -1
    Response.ExpiresAbsolute 	= Now() - 2
    Response.AddHeader 			"pragma","no-cache"
    Response.AddHeader 			"cache-control","private"
    Response.CacheControl 		= "No-Store"    '
    '            ___________________________________________
    '           /                                           \
    '---------- |   INIZIALIZZAZIONE VARIABILI E OGGETTI     |----------------------------------+
    '           \___________________________________________/                    
    'In questa fase vengono inizializzate le variabili e gli oggetti necessarie al sistema
    '
    '----VARIABILI SEMPLICI----
    bolAutorizzato 		= true 		'Variabile boolean per le autorizzazioni
    stringa 			= date()	'La data odierna
    converti 			= Month(stringa) & "/" & Day(stringa) & "/" & Year(stringa)'Costruisco la data attuale nel formato compatibile con MS ACCESS
    '
    '----VARIABILI DI SESSIONE----
    session("ver") 		= SYSTEM_COD_VERSION 'Codice versione attuale
    session("nam") 		= SYSTEM_CMS_VERSION 'Nome versione attuale
    session("autoMOD") 	= "" 'Variabile per la gestione autorizzazioni moduli
    session("aut") 		= "" 'Variabili di controllo per la gestione SAM
    '
    '----ISTAMZE OGGETTI----
    Set objFSO 			= Server.CreateObject("Scripting.FileSystemObject")
    Set objFolder 		= Server.CreateObject("Scripting.FileSystemObject")
    %>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <%
    'inclusione motore per le inclusioni dinamiche
    %>
    <!--#include file="dynamicinclude.asp"-->
    <%
    '            ___________________________________________
    '           /                                           \
    '---------- |      CONTROLLO INSTALLAZIONE CMS           |----------------------------------+
    '           \___________________________________________/                    
	if not objFSO.FileExists(server.MapPath("include/database_connect.asp")) then
		incFile "configuration/installcms.asp"
	end if
    '            ___________________________________________
    '           /                                           \
    '---------- |     INCLUSIONE DIPENDENSE ESTERNE          |----------------------------------+
    '           \___________________________________________/                    
    incFile "include/database_connect.asp" 		'Inclusione gestione connessione ai database
    incFile "include/inc_lingua_country.asp"	'Inclusione gestione riconoscimento lingua
    incFile "include/inc_config.asp"			'Inclusione registro di sistema
    incFile "include/inc_lingua_XML.asp"		'Inclusione gestione multilingua	
    incFile "include/inc_functionvb.asp"		'Inclusione funziona VB di sistema
    incFile "include/rendering.asp"				'Inclusione motore grafico
    incFile "include/captcha.asp"				'Inclusione chaptcha per login sicuro
    incFile "include/inc_class_upload.asp"      'Inclusione classe per upload file    
    incFile "include/firewall.asp"				'Inclusione firewall di sistema
    incFile "include/spyblock.asp"				'Inclusione anti spyware di sistema	
    '            ___________________________________________
    '           /                                           \
    '---------- |     POSIZIONAMENTO UTENTE O GUEST          |----------------------------------+
    '           \___________________________________________/                    
    '
    'Controllo se l'utente ha effettuato il login
    if session("uID") <> "" then
	    'Salvo un cookie da utilizzare per la chat visubox
	    Response.Cookies("visubox_nick") = username(session("uID"))
	    'Salvo il nome da passare come ping
	    sUser = Username(session("uID"))
    'Se l'utente non è loggato
    else
    	     'Se la sessione è scaduta tento di recuperarla dal cookies memorizzato
	     Session("uID") = request.Cookies("log")("uID")
	     Session("livelloUser") = request.Cookies("log")("LivelloUser")	
	     Session("last_here_date") = request.Cookies("log")("LastHere") 
	     'Ripeto nuovamente il controllo sull'utente
	     if session("uID") <> 0 AND session("uID") <> "" then  
		    'Salvo un cookie da utilizzare per la chat visubox
		    Response.Cookies("visubox_nick") = username(session("uID"))
		    'Salvo il nome da passare come ping
		    sUser = Username(session("uID"))
	    else	        
		    'Controllo che al visitatore non sia già stato assegnato un nome al visitatore, se non ha un nome lo assegno.
		    if session("guest") = "" then 
			session("guest") = assegnaGuest()  
			'Salvo il nome da passare come ping
			sUser = session("guest")
		    end if
	    End if
    end if        
	'Controllo se l'utente che chiama il ping è nuovo o è già presente
	Set onLine = objConn.Execute("SELECT * FROM TB_USERS_PING WHERE Us = '" & Username(session("uID")) & "'")
	if onLine.eof then
		'Aggiungo l'utente nuovo
		objConn.Execute("INSERT INTO TB_USERS_PING(Us, Ping) VALUES('"&Username(session("uID"))&"','" &int(timer())& "')")
	else
		'Aggiorno il ping dell'utente esistente
		objConn.Execute("UPDATE TB_USERS_PING SET Ping = '"&int(timer())&"' WHERE Us = '" & Username(session("uID")) & "'")
	end if
	'Elimino tutti gli utenti con ping scaduto
	objConn.Execute("DELETE FROM TB_USERS_PING WHERE Ping < " & Int(timer()) - SYSTEM_PING_TIMER)
	Set onLine = Nothing  
    %>
    <script type="text/javascript" src="include/inc_functionjs.js"></script>
	<script type="text/javascript" src="include/jquery.js"></script>
	<script type="text/javascript" src="include/jquery.block.js"></script>
	<script type="text/javascript" src="include/jquery.heartbeat.js"></script>
	<script type="text/javascript" src="include/jquery.interface.js"></script>
	<script type="text/javascript" src="include/jquery.history.js"></script>
	<script type="text/javascript" src="include/jquery.tabs.js"></script>
	<script type="text/javascript" src="include/tiny_mce/tiny_mce.js"></script>
	<script type="text/javascript">
	 //Elimino i conflitti di JQuery con le altre librerie (prototype - scriptacoulus)
	 var $j = jQuery.noConflict();
	 <%
	 'Controllo se è richiesto il ping Ajax degli utenti
	 if SYSTEM_PING then
	 %>
	  $.jheartbeat.set({
			url: "default.asp?modulo=ajax&amp;proc=login/ping".replace("amp;", ""),
			delay: <%=SYSTEM_PING_TIMER%> * 1000
		}, function () {
	  });
	<%
	end if
	%>
	</script>  
	<%
	'            ___________________________________________
	'           /                                           \
	'---------- |  RECUPERO INFORMAZIONI DA VISUALIZZARE     |----------------------------------+
	'           \___________________________________________/                    
	'
	' In questa fase passo recuperare il modulo e il file che l'utente intende visualizzare, nel caso
	' in cui non viene passato nessun modulo si usa quello di default, e nel caso in cui non viene
	' richiesto nessun file specifico del modulo si visualizza la home del modulo.
	'
	foldName = request.querystring("modulo") 'nome cartella obbligatorio
	moduloFile = request.querystring("file") 'nome file facoltativo
	session("blocchiDX") = bolBloccoDX 'assegno valore di default
	session("blocchiSX") = bolBloccoSX 'assegno valore di default 
	'Controllo che la cartella non sia nulla, se lo è la setto con la pagina inziale di default
	if foldName = "" then
	'Controllo se l'utente desidera come home page un modulo o una pagina
	if SYSTEM_HOME_TYPE = "page" then
		foldName = "pages"     'assegno il modulo delle home
	else
		foldName = defaultHome 'assegno valore di default
	end if
	end if	
	'Gestione differenziata dei fogli di stile per l'accessibilità del sito web
	Select case session("font")
		case "normal", "":	'Stile normale
			%><link rel="stylesheet" type="text/css" title="struttura" href="<%=imgFolder & "/normal.css"%>" /><%
		case "contrast":	'Stile con contrasto blu
			%><link rel="stylesheet" type="text/css" title="struttura" href="<%=imgFolder & "/contrast.css"%>" /><%
		case else			'Stile di default
			%><link rel="stylesheet" type="text/css" title="struttura" href="<%=imgFolder & "/normal.css"%>" /><%
	End select
	
	if session("font") <> "contrast" then
		response.Write vbNewLine & "<style type=""text/css"">" &vbNewLine	
		if objFSO.FileExists(server.MapPath(imgFolder & "/stili/modulo-"&lcase(foldName&".css"))) then
			Server.Execute(imgFolder & "/stili/modulo-"&lcase(foldName&".css"))
		end if
	
		strSQL = "SELECT * FROM TB_BLOCCHI WHERE BOL_ATTIVO  = 1 ORDER BY ID_ORDINE"
	   'Avvio l'oggetto recordset per rucuperare i blocchi
		Set bRS = objConn.Execute(strSQL)	
		Do while not bRS.EOF
			if bRS("NOMEFILE") <> "" then
				if objFSO.FileExists(server.MapPath(imgFolder & "/stili/"&lcase(bRS("NOMEFILE")&".css"))) then
					Server.Execute(imgFolder & "/stili/"&lcase(bRS("NOMEFILE")&".css"))
				end if	
			end if
			bRS.MoveNext
		loop
		Set bRS = Nothing
		response.Write vbNewLine & "</style>"
	end if
	
	%>  
    <link rel="shortcut icon" href="favicon.ico" />
    
    <%
	'RECUPERO SINDACATION FEED
	if objFSO.FolderExists(Server.MapPath(foldName & "/feed")) then
	Set objFolder = objFSO.GetFolder(Server.MapPath(foldName & "/feed"))
		For each objFile in objFolder.Files
			if Left(objFile.Name, 5) = "feed-" then
				Server.Execute(Server.MapPath(foldName & "/feed/" & objFile.Name))
			End if
		Next
	End if
	%>
    <title><%=strBody%></title>

    <!-- INCLUDO I TAG META-->
    <meta http-equiv="Content-type" content="text/html;charset=utf-8" />
    <meta name="description" content="<%=SYSTEM_META_DESC%>" />
    <meta name="Author" content="BASE Openasp GNU License, adattamento: <%=SYSTEM_META_AUTOR%>" />
    <meta name="keywords" content="<%=SYSTEM_META_KEY%>" />
    <% 
    '
    '            ___________________________________________
    '           /                                           \
    '---------- |       TEST SULLO STATO DEL CMS             |----------------------------------+
    '           \___________________________________________/
    'In questa fase si controlla se il sistema si trova in stato di lock, ovvero è stato bloccato 
    'dall'admin, in tal caso si rimanda alla pagina locked.asp
    IF SYSTEM_STATUS = 1 and request.QueryString("modulo") <> "login" THEN
    	incFile "locked.asp"
    End if
    '            ___________________________________________
    '           /                                           \
    '---------- |             GESTIONE BANNER                |----------------------------------+
    '           \___________________________________________/
    '
	if request.QueryString("modulo") <> "ajax" and request.QueryString("file") <> "inc_container" then
		'Dichiarazione delle variabili per la costruzione del popup
		Dim nomeStruct		'Nome della struttura JS
		Dim nomeBody		'Nome del body collegato alla JS
		Dim nomeStructLeave		'Nome della struttura JS per body onunLoad
		Dim nomeBodyLeave		'Nome del body collegato alla struttura JS onunLoad
		Dim containerActive   	'Boolean per container attivo oppure no
		Dim intWidth		'Larghezza della popup
		Dim intHeight		'Altezza della popup
		Dim leftPos			'Posizione sinistra della popup
		Dim topPos			'Posizione dal top della popup
		containerActive = true 	'Setto il container attivo
		
		'Recupero i parametri per la pop-up dal file XML
		nomeStruct 		= getParam("nomeStruct")
		nomeBody  		= getParam("nomeBody")
		nomeStructLeave = getParam("nomeStructLeave")
		nomeBodyLeave   = getParam("nomeBodyLeave")  
		intWidth   		= getParam("width")
		intHeight  		= getParam("height")
		leftPos    		= getParam("left")
		topPos     		= getParam("top")
			
		Set bannerXMLdom = Server.CreateObject("Microsoft.XMLDOM")
		bannerXMLdom.async = true    
		If bannerXMLdom.Load(sStatsPath&"\SYSTEM_BANNER.xml") Then
		
		'-------------------GESTIONE CONTRATTI A PAGAMENTO ---------------------------------------
		str = date() 'data odierna
		cv = Day(stringa) & "/" &Month(stringa) & "/" & Year(stringa) 'formatto la data
		Set data = bannerXMLdom.selectSingleNode("//systembanner/stat/date") 'Recupero l'ultima data visualizzata
		giorni = dateDiff("d",Cdate(data.text),Cdate(cv)) 'calcolo la differenza trascorsa dall'ultima data
		'Itero tutti i contratti attivi e in scadenza
		Set utenza = bannerXMLdom.selectSingleNode("//systembanner/utenza") 
		For each con in utenza.childNodes
			'Prima di effettuare qualsiasi controllo mi accerto che il contratto sia a pagamento
			if typeContratto(con.Attributes(0).text) = "SI" then
				'Se è attivo o in scadenza procedo
				if con.Attributes(6).text = "attivo" OR con.Attributes(6).text = "in scadenza" then
					'Se il contratto ha le rate pagate scalo i giorni rimanenti
					if payContratto(con.Attributes(0).text) then
						con.Attributes(13).text = Cint(con.Attributes(13).text) - giorni
					end if
					'Recupero i giorni di validità del contratto
					giorni = con.Attributes(13).text
					'--- CONTROLLO CONTRATTO SCADUTO ----
					if giorni < 0 then	
						con.Attributes(6).text = "scaduto"	'setto il contratto come scaduto
						'Controllo se si desidera spedire l'email
						if con.Attributes(11).text = "SI" then
						 'Controllo se è già stata spedita l'email
						 if con.Attributes(12).text <> "SC" then
							 con.Attributes(12).text = "SC"'Setto il parametro di email inviata
							 ' --- INVIO L'EMAIL DI CONTRATTO SCADUTO ---
							 mailtype = "HTML"
							 strSender = system_mail_info
							 strRecipients = con.Attributes(10).text
							 strSubject = traducisys("ling_ad_135") & " " & con.Attributes(0).text
							 strMessage = "<p align='center'><font face='verdana' size='2' color='black'><b>"&traducisys("ling_ad_144")&"</b><hr>"&traducisys("ling_ad_137") & "<br/><br/>"
							 strMessage = strMessage & "<a style='font-weight:bold; color:blue; text-decaration:none' href='http://" & system_url & "/default.asp?modulo=advertise'>http://" & system_url & "/default.asp?modulo=advertise</a>" & "<br/><br>"				 
							 strMessage = strMessage & traducisys("ling_ad_138") & "<br><hr></font></p>"
							 incFile "include/inc_email.asp"		
						 end if		
						End if				
					'--- CONTROLLO CONTRATTO IN SCADENZA ----
					elseif giorni >=0 AND giorni <=10 then
						con.Attributes(6).text = "in scadenza"	'setto il contratto come scaduto
						'Controllo se si desidera spedire l'email
						if con.Attributes(11).text = "SI" then
							if con.Attributes(12).text = "" then
								con.Attributes(12).text = "IN"
								 ' --- INVIO L'EMAIL DI CONTRATTO SCADUTO ---
								 mailtype = "HTML"
								 strSender = system_mail_info
								 strRecipients = con.Attributes(10).text
								 strSubject = traducisys("ling_ad_135") & " " & con.Attributes(0).text
								 strMessage = "<p align='center'><font face='verdana' size='2' color='black'><b>"&traducisys("ling_ad_144")&"</b><hr>"&traducisys("ling_ad_136") & "<br/>"& traducisys("ling_ad_145") &"<br/><br/>"
								 strMessage = strMessage & "<a style='font-weight:bold; color:blue; text-decaration:none' href='http://" & system_url & "/default.asp?modulo=advertise'>http://" & system_url & "/default.asp?modulo=advertise</a>" & "<br/><br>"				 
								 strMessage = strMessage & traducisys("ling_ad_138") & "<br><hr></font></p>"
								 incFile "include/inc_email.asp"			
							End if
						End if						
					end if
				end if
			End if
		Next
		Set contratti = Nothing
		data.text = cv 'Setto la data odierna come ultima data visualizzata
		Set data = Nothing
		'Salvo i dati nel file XML
		call salva(bannerXMLdom,sStatsPath&"\SYSTEM_BANNER.xml")
			
		'Controllo se il container dei banner del body è attivo oppure no
		Set containerBody = bannerXMLdom.selectSingleNode("//systembanner/container/cont[@nome=""body""][@stat=""active""]") 
			If containerBody is Nothing then 
			containerActive = false 'Il container non è attivo
		else
			'Controllo se il modulo o la pagina attuale possono visualizzare banner
			If request.QueryString("modulo") = "pages" then
				If inStr(containerBody.Attributes(6).text, request.QueryString("idpage")&",") > 0 then
					containerActive = false
				end if
			else
				if inStr(containerBody.Attributes(5).text, request.QueryString("modulo")&",") > 0 then
					containerActive = false
				end if
			end if			
		end if
		Set containerBody = Nothing   
		Else
			containerActive = false 'Il container non è attivo
		End if
		'Controllo se il banner di pagina deve essere visto una volta sola o infinite volte
		if getParam("visib") = "1" then
			if session("vis") <> "" then containerActive = false
		end if
	end if
    '            ___________________________________________
    '           /                                           \
    '---------- |GENERO LE FUNZIONI JS DEL BODY LOAD E UNLOAD|----------------------------------+
    '           \___________________________________________/
    '
    With response
        .write "<script language=""JavaScript"" type=""text/javascript"">" & vbNewLine
        .write "    function functionLoad()"  & vbNewLine
        .write "    {" & vbNewLine
			if request.QueryString("modulo") <> "ajax" and request.QueryString("file") <> "inc_container" then
				'Se il file viene trovato lo carico altrimenti mostro il messaggio di errore
				If bannerXMLdom.Load(sStatsPath&"\SYSTEM_BANNER.xml") AND containerActive Then
					Set bannerXML = bannerXMLdom.selectSingleNode("//systembanner/bodystructure/struct[@name="""&nomeBody&"""][@js="""&nomeStruct&"""][@type=""load""]")
					If NOT bannerXML Is Nothing then
						response.Write bannerXML.text
					end if
					Set bannerXML = Nothing		
				End If	    		    
			End If
        .write "    }" & vbNewLine
        .write "    function functionunLoad()"  & vbNewLine
        .write "    {" & vbNewLine
			if request.QueryString("modulo") <> "ajax" and request.QueryString("file") <> "inc_container" then
				'Se il file viene trovato lo carico altrimenti mostro il messaggio di errore
				If bannerXMLdom.Load(sStatsPath&"\SYSTEM_BANNER.xml") AND containerActive Then
					Set bannerXML = bannerXMLdom.selectSingleNode("//systembanner/bodystructure/struct[@name="""&nomeBodyLeave&"""][@js="""&nomeStructLeave&"""][@type=""leave""]")
					If NOT bannerXML Is Nothing then
						.Write bannerXML.text & vbNewLine
					end if
					Set bannerXML = Nothing		
				End If	    		    
			End If
        .write "    }" & vbNewLine	
        .write "    </script>" & vbNewLine
    End with
    '            ___________________________________________
    '           /                                           \
    '---------- |  VISUALIZZO LA PARTE JS DEL BANNER ATTUALE |----------------------------------+
    '           \___________________________________________/                    
    '        
	if request.QueryString("modulo") <> "ajax" and request.QueryString("file") <> "inc_container" then 
		'Se il file viene trovato lo carico
		If bannerXMLdom.Load(sStatsPath&"\SYSTEM_BANNER.xml") AND containerActive Then
			'Mi collego al container richiesto
			Set bannerXML = bannerXMLdom.selectSingleNode("//systembanner/container/cont[@nome=""body""][@stat=""active""]")
			'Controllo che esista
			If NOT bannerXML Is Nothing then
				'Controllo che abbia dei banner al suo interno
				if bannerXML.hasChildNodes then 
						s = "<center>"
						'Se il numero di elementi del container è maggiore del numero di banner presenti
						'li mostro tutti, altrimenti mostro il numero consentito
						If Cint(bannerXML.Attributes(1).text) >= bannerXML.childNodes.length then
							tot =  bannerXML.childNodes.length 'tutti i banner
						else
							tot = bannerXML.Attributes(1).text 'il numero consentito
						end if
						pre = "" 
						act = "" 
						'Itero il numero di banner richiesto
						For i = 1 to tot
							'Mi assicuro che il banner che sto per mostrare non sia già mostrato
							Do
								'Genero un banner casuale
								Randomize()
								casuale = Int(rnd * bannerXML.childNodes.length)
								pre = pre & act & ","
								act = casuale
							Loop while inStr(pre,act&",") > 0
							'MOstro il banner
							Set banner = bannerXML.childNodes(casuale)
							Select case banner.Attributes(7).text
							CASE "img":
								v = banner.Attributes(2).text
								s = s & "<img vspace='0' hspace='0' src='"& banner.Attributes(2).text &"'>&nbsp;"
							CASE "content":
								v = banner.text
								s = s & banner.text
							End Select
							Set banner = Nothing
						Next		
						s = s & "</center>"
				else
					'Questo spazio è utilizzabile nel caso in cui il container attivo sia vuoto
					'utile per messaggi promozionali
					if bannerXML.Attributes(3).text <> "" then
						v = bannerXML.Attributes(3).text
						s = "<img src='"&bannerXML.Attributes(3).text&"'>"
					end if
				End if
			end if
			Set bannerXML = Nothing
		End If	     
		'Se il file viene trovato lo carico
		If bannerXMLdom.Load(sStatsPath&"\SYSTEM_BANNER.xml") AND containerActive Then
			Set bannerXML = bannerXMLdom.selectSingleNode("//systembanner/bannerstructure/struct[@name="""&nomeStruct&"""]")
			If NOT bannerXML Is Nothing then
				response.Write Replace(Replace(Replace(Replace(Replace(Replace(bannerXML.text, "@INTWIDTH", intWidth), "@INTHEIGHT", intHeight), "@LEFTPOS", leftPos), "@TOPPOS", topPos), "@ALPHA", v), "@CONTENT", s)
			end if
			Set bannerXML = Nothing
			Set bannerXML = bannerXMLdom.selectSingleNode("//systembanner/bannerstructure/struct[@name="""&nomeStructLeave&"""]")
			If NOT bannerXML Is Nothing then
				response.Write Replace(Replace(Replace(Replace(Replace(Replace(bannerXML.text, "@INTWIDTH", intWidth), "@INTHEIGHT", intHeight), "@LEFTPOS", leftPos), "@TOPPOS", topPos), "@ALPHA", v), "@CONTENT", s)
			end if
			Set bannerXML = Nothing		
		End If	
	End if	
    %>
    </head>
    <%
        '            ___________________________________________
        '           /                                           \
        '---------- |   CONTROLLO DEL FILE DI CONFIGURAZIONE     |----------------------------------+
        '           \___________________________________________/                    
        '
        ' In questa fase controllo se è presente il file di configurazione del modulo, questo file serve
        ' ad impostare al modulo delle configurazioni speciali diverse da quelle di default
        '
        if objFSO.FileExists(Server.MapPath("moduli/" & foldName & "/" & "modulo-config.asp")) then
            'se è presente lo eseguo
            Server.Execute("moduli/" & foldName & "/modulo-config.asp")
        end if
		if inStr(request.ServerVariables("QUERY_STRING") , "modulo=pages") > 0 OR request.ServerVariables("QUERY_STRING") = "" then
			if request.QueryString("idpage") = "" then
				idp = SYSTEM_PAGE_DEFAULT
			else
				idp = request.QueryString("idpage")
			end if
			set ogRS = objConn.Execute("SELECT * FROM TB_PAGES WHERE PG_ID = " & idp)
			if NOT ogRS.EOF then
				select case ogRS("PG_BLOC")
					CASE 1:
						session("blocchiSX") = true ' Abilito i blocchi di sinistra
						session("blocchiDX") = true 'Abilito i blocchi di destra
					CASE 2:
						session("blocchiSX") = false ' Disabilito i blocchi di sinistra
						session("blocchiDX") = false 'Disabilito i blocchi di destra
					CASE 3:
						session("blocchiSX") = true ' Abilito i blocchi di sinistra
						session("blocchiDX") = false 'Disabilito i blocchi di destra
					CASE 4:
						session("blocchiSX") = false ' Disabilito i blocchi di sinistra
						session("blocchiDX") = true 'Abilito i blocchi di destra
				end select
			end if
			set ogRS = Nothing
		end if

        '            ___________________________________________
        '           /                                           \
        '---------- |     RECUPERO PARAMETRI GESTIONE SAM        |----------------------------------+
        '           \___________________________________________/                    
        '
        ' In questa fase passo a recuperare il grado SAM dell'utente e lo salvo in una variabile standard
        ' e in una variabile di sessione
        '
        if session("livelloUser") = 2 then
		aut = "S" 'l'utente è un superAdmin
		session("aut") = "S"
        elseif isADM(session("uid"), "") then
		aut = "A" 'l'utente è un Admin
		session("aut") = "A"
        elseif isMOD(session("uid"), "") then
		aut = "M" 'l'utente è un Moderatore
		session("aut") = "M"   
        else
		aut = "U" 'l'utente è un utente semplice
		session("aut") = "U"
        end if 
    %>
<body onload="functionLoad()" onunload="functionunLoad()">
<%
    
    '            ___________________________________________
    '           /                                           \
    '---------- |VISUALIZZO LA PARTE BODY DEL BANNER ATTUALE |----------------------------------+
    '           \___________________________________________/                    
    ' 
	if request.QueryString("modulo") <> "ajax" and request.QueryString("file") <> "inc_container" then   
			'Se il file viene trovato lo carico
			If bannerXMLdom.Load(sStatsPath&"\SYSTEM_BANNER.xml") AND containerActive Then
				'Mi collego al container richiesto
				Set bannerXML = bannerXMLdom.selectSingleNode("//systembanner/container/cont[@nome=""body""][@stat=""active""]")
				'Controllo che esista
				If NOT bannerXML Is Nothing then
					'Controllo che abbia dei banner al suo interno
					if bannerXML.hasChildNodes then 
							s = "<br/><center>"&vbNewLine
							'Se il numero di elementi del container è maggiore del numero di banner presenti
							'li mostro tutti, altrimenti mostro il numero consentito
							If Cint(bannerXML.Attributes(1).text) >= bannerXML.childNodes.length then
								tot =  bannerXML.childNodes.length 'tutti i banner
							else
								tot = bannerXML.Attributes(1).text 'il numero consentito
							end if
							pre = "" 
							act = "" 
							'Itero il numero di banner richiesto
							For i = 1 to tot
								'Mi assicuro che il banner che sto per mostrare non sia già mostrato
								Do
									'Genero un banner casuale
									Randomize()
									casuale = Int(rnd * bannerXML.childNodes.length)
									pre = pre & act & ","
									act = casuale
								Loop while inStr(pre,act&",") > 0
								'MOstro il banner
								Set banner = bannerXML.childNodes(casuale)
								Select case banner.Attributes(7).text
								CASE "img":
									s = s & "<img vspace='0' hspace='0' src='"& banner.Attributes(2).text &"'>&nbsp;"
								CASE "content":
									s = s & banner.text
								End Select
								Set banner = Nothing
							Next		
						s = s & "</center>"&vbNewLine
					else
						'Questo spazio è utilizzabile nel caso in cui il container attivo sia vuoto
						'utile per messaggi promozionali
						if bannerXML.Attributes(3).text <> "" then
							s = "<img src='"&bannerXML.Attributes(3).text&"'>"
						end if
					End if
				end if
				Set bannerXML = Nothing
			End If	
		'Se il file viene trovato lo carico altrimenti mostro il messaggio di errore
		If bannerXMLdom.Load(sStatsPath&"\SYSTEM_BANNER.xml") AND containerActive Then
			Set bannerXML = bannerXMLdom.selectSingleNode("//systembanner/bodystructure/struct[@name="""&nomeBody&"""][@js="""&nomeStruct&"""][@type=""nonload""]")
			If NOT bannerXML Is Nothing then
				a = Replace(Replace(Replace(Replace(bannerXML.text, "@INTWIDTH", intWidth), "@INTHEIGHT", intHeight), "@LEFTPOS", leftPos), "@TOPPOS", topPos)
				if inStr(a, "@CONTENT") > 0 then
					a = replace(a, "@CONTENT", s)
				end if
				response.Write a
			end if
			Set bannerXML = Nothing		
		End If	    
		Set bannerXMLdom = Nothing
    End if
    '            ___________________________________________
    '           /                                           \
    '---------- |    SUB PER LA VISUALIZZAZIONE: MODULI      |----------------------------------+
    '           \___________________________________________/                    
    '
    ' Questa sub viene richiamata della funzione del tema scelto per visualizzare i moduli
    Sub moduloCentro()
		str_titolo = ""
        '--------------------FASE DI CARICAMENTO DEI MODULI----------------
        'Se non è richiesto nessun file specifico eseguo la home del modulo
        If moduloFile = "" then
            'Controllo che la cartella del modulo esista
            if objFSO.FolderExists(Server.MapPath("moduli/" & foldName)) then
                'Se l'utente è autorizzato visuazlizzo il modulo
                if bolAutorizzato then  
                    'Controllo esistenza del modulo 
                    if objFSO.FileExists(Server.MapPath("moduli/" & foldName & "/" & foldName & ".asp")) then
                        'Controllo se è richiesta la visualizzazione di mancata traduzione modulo
                        if session("tradModu") = false and SYSTEM_SHOW_TRAD then
                            With response
                                .Write "<div style=""background-color:#E2E2E2; width:100%;"" class=""errore"">"
                                .Write traducisys("ling_52")
                                .Write "</div>"
                            End with
                        end if
                        'Eseguo la pagina del modulo
                        incFile "moduli/" & foldName & "/" & foldName & ".asp"
                    else
                        'Modulo non trovato
                        incFile "modulonotfound.asp"
                    end if
                'Se non è autorizzato visualizzo l'errore
                else
                    incFile "accessonegato.asp"
                end if
            else
                'altrimenti mostro la pagina di errore
                incFile "modulonotfound.asp"
            end if
        else
            'Se è richiesto un file specifico del blocco controllo che esista
            if objFSO.FileExists(Server.MapPath("moduli/" & foldName & "/" & moduloFile & ".asp")) then
                'se esiste lo eseguo
                incFile "moduli/" & foldName & "/" & moduloFile & ".asp"
            else
                'altrimenti stampo la pagina di errore
                incFile "filenotfound.asp"
            end if
        end if
    End sub
	
	'Variabili globali utilizzate dal motore di rendering
	Dim objRS, pos, str_titolo
	
    '            ___________________________________________
    '           /                                           \
    '---------- |   SUB PER LA VISUALIZZAZIONE BLOCCHI SX    |----------------------------------+
    '           \___________________________________________/                    
    '
    ' Questa sub viene richiamata della funzione del tema scelto per visualizzare la colonna che conterrà i blocchi
    ' di sinistra
    '               
    Sub ColonnaSinistra()
		pos = "S"
        'In base all'autorizzazione SAM dell'utente passo a visualizzare tutti i blocchi per cui è abilitato
        Select case aut
            CASE "A", "S" 'ADMIN - SUPERADMIN
                'Costruisco la query SQL
                strSQL = "SELECT * FROM TB_BLOCCHI WHERE "&_
                     "STR_POSIZIONE = 'S' AND "&_
                     "(STR_AUTORIZZAZIONE = 'A' OR "&_
                     "STR_AUTORIZZAZIONE = 'M' OR "&_
                     "STR_AUTORIZZAZIONE = 'U') AND BOL_ATTIVO = 1 ORDER BY ID_ORDINE"
            CASE "M" 'MODERATORE
                'Costruisco la query SQL
                strSQL = "SELECT * FROM TB_BLOCCHI WHERE "&_
                     "STR_POSIZIONE = 'S' AND "&_
                     "(STR_AUTORIZZAZIONE = 'M' OR "&_
                     "STR_AUTORIZZAZIONE = 'U') AND BOL_ATTIVO = 1 ORDER BY ID_ORDINE"
            CASE "U" 'UTENTE
                'Costruisco la query SQL
                strSQL = "SELECT * FROM TB_BLOCCHI WHERE "&_
                     "STR_POSIZIONE = 'S' AND "&_
                     "STR_AUTORIZZAZIONE = 'U' AND BOL_ATTIVO  = 1 ORDER BY ID_ORDINE"
        end select
        'Avvio l'oggetto recordset per rucuperare i blocchi
        Set objRS = objConn.Execute(strSQL)
        session("cont") = 0 'inizializzazione contatore blocchi
        'Controllo fine record
        if NOT objRS.EOF then
            'Contatore
            Do while NOT objRS.EOF
                session("cont") = session("cont") + 1 'Incremento contatore
                objRS.moveNext
            loop
            objRS.MoveFirst
            'Controllo fine record
            IF not objRS.EOF then
                'Iterazione record
                Do while NOT objRS.EOF
                    'Richiamo la funzione che costruisce il tema per il blocco
                    idBloc = objRS("ID")
					'salvo una variabile di sessione per la gestione di blocchi multipli
					session("blockid") = idBloc
					str_titolo = objRS("STR_TITOLO")
					'Recupero il nodo XML realativo alla routine dei blocchi
					if left(str_titolo,2) = "{@" and right(str_titolo, 1) = "}" then
			        	Set bloccoN = themeXML.selectSingleNode("theme/operation[@name="""&replace(replace(str_titolo, "{@", ""), "}", "")&"""]")
						if bloccoN is Nothing then
							Set bloccoN = themeXML.selectSingleNode("theme/operation[@name=""blocco""]")
						end if
					else
						Set bloccoN = themeXML.selectSingleNode("theme/operation[@name=""blocco""]")					
					end if
                    call render(bloccoN.text)
                    objRS.MoveNext
                loop
            end if
        end if
        Set bloccoN = Nothing
    End sub 
	
	sub renderBloc()
		'Controllo se il blocco è modificabile "tipo = N" oppure se è un blocco di file esterno
		if objRS("STR_TIPO") = "N" then
			'testo se è presente la index del blocco richiesto all'interno della sua cartella,          
			if testFile(objRS("NOMEFILE"), "blocchi") then
				'se è presente eseguo la index
				incFile "blocchi/" & objRS("NOMEFILE") & "/index.asp"
			else
				'Se no è presente stampo l'errore                   
				Response.Write "<p class='testo' align='center'>" & traducisys("ling_07") & "</p><br />"
			end if
		else
			contenuto = objRS("MEM_CONTENT")
			render(contenuto)
		end if
		'Controllo se l'utente è il supAdmin o se sono presenti almeno due blocchi per mostrare
		'i comandi di navigazione
		if session("LivelloUser") = 2 AND session("cont") > 1 then
			if pos = "S" then
				'Controllo se il blocco è il primo in ordine crescente
				if NOT testBloc(objRS("ID_ORDINE"), "S") = "min" then
					With response
						.Write "<a href=""admin.asp?op=moveBloc&amp;id="  & objRS("ID") & "&amp;pos=up&amp;lr=S&amp;url=" & request.ServerVariables("URL") & "?" & replace(request.ServerVariables("QUERY_STRING"), "&", "&amp;") & """>"
						.Write "<img src=""themes/SHARE/IMG_06.gif"" border=""0"" alt=""" &  traduci("ling_forum_119") & """ /></a>"
					End with
				end if
				'Se il blocco corrente non è l'ultimo mostro la freccia per spostarlo in basso
				if NOT testBloc(objRS("ID_ORDINE"), "S") = "max" then
					With response
						.Write "<a href=""admin.asp?op=moveBloc&amp;id=" & objRS("ID") & "&amp;pos=down&amp;lr=S&amp;url=" & request.ServerVariables("URL") & "?" & replace(request.ServerVariables("QUERY_STRING"), "&", "&amp;") & """>"
						.Write "<img src=""themes/SHARE/IMG_05.gif"" border=""0"" alt="""  & traduci("ling_forum_120") & """ /></a>"
					End with
				end if
			else
				'Se il blocco corrente non è il primo mostro la freccia per spostarlo in alto
				if NOT testBloc(objRS("ID_ORDINE"), "D") = "min" then
					With response
						.Write "<a href=""admin.asp?op=moveBloc&amp;id="  & objRS("ID") & "&amp;pos=up&amp;lr=D&amp;url=" & request.ServerVariables("URL") & "?" & replace(request.ServerVariables("QUERY_STRING"), "&", "&amp;") & """>"
						.Write "<img src=""themes/SHARE/IMG_06.gif"" border=""0"" alt=""" &  traduci("ling_forum_119") & """ /></a>"
					End with
				end if
				'Se il blocco corrente non è l'ultimo mostro la freccia per spostarlo in basso
				if NOT testBloc(objRS("ID_ORDINE"), "D") = "max" then
					With response
						.Write "<a href=""admin.asp?op=moveBloc&amp;id=" & objRS("ID") & "&amp;pos=down&amp;lr=D&amp;url=" & request.ServerVariables("URL") & "?" & replace(request.ServerVariables("QUERY_STRING"), "&", "&amp;") & """>"
						.Write "<img src=""themes/SHARE/IMG_05.gif"" border=""0"" alt="""  & traduci("ling_forum_120") & """ /></a>"
					End with
				end if             
			end if
		End if
	end sub	
    '            ___________________________________________
    '           /                                            \
    '---------- |   SUB PER LA VISUALIZZAZIONE BLOCCHI DX    |----------------------------------+
    '           \___________________________________________/                    
    '
    ' Questa sub viene richiamata della funzione del tema scelto per visualizzare la colonna che conterrà i blocchi
    ' di destra
    '                   
    Sub ColonnaDestra()
		pos = "D"
        
        'In base all'autorizzazione SAM dell'utente passo a visualizzare tutti i blocchi per cui è abilitato
        Select case aut
            CASE "A", "S"
                'Costruisco la query SQL
                strSQL = "SELECT * FROM TB_BLOCCHI WHERE "&_
                     "STR_POSIZIONE = 'D' AND "&_
                     "(STR_AUTORIZZAZIONE = 'A' OR "&_
                     "STR_AUTORIZZAZIONE = 'M' OR "&_
                     "STR_AUTORIZZAZIONE = 'U') AND BOL_ATTIVO = 1 ORDER BY ID_ORDINE"
            CASE "M"
                'Costruisco la query SQL
                strSQL = "SELECT * FROM TB_BLOCCHI WHERE "&_
                     "STR_POSIZIONE = 'D' AND "&_
                     "(STR_AUTORIZZAZIONE = 'M' OR "&_
                     "STR_AUTORIZZAZIONE = 'U') AND BOL_ATTIVO = 1 ORDER BY ID_ORDINE"
            CASE "U"
                'Costruisco la query SQL
                strSQL = "SELECT * FROM TB_BLOCCHI WHERE "&_
                     "STR_POSIZIONE = 'D' AND "&_
                     "STR_AUTORIZZAZIONE = 'U' AND BOL_ATTIVO = 1 ORDER BY ID_ORDINE"
        end select
        Set objRS = objConn.Execute(strSQL)
        session("cont") = 0 'inizializzazione contatore blocchi
        if NOT objRS.EOF then
            Do while NOT objRS.EOF
                session("cont") = session("cont") + 1 'Incremento contatore
                objRS.moveNext
            loop
            objRS.MoveFirst
            IF not objRS.EOF then
                Do while NOT objRS.EOF
                   'Richiamo la funzione che costruisce il tema per il blocco
                    idBloc = objRS("ID")
					'salvo una variabile di sessione per la gestione di blocchi multipli
					session("blockid") = objRS("ID")
					str_titolo = objRS("STR_TITOLO")
					'Recupero il nodo XML realativo alla routine dei blocchi
					if left(str_titolo,2) = "{@" and right(str_titolo, 1) = "}" then
			        	Set bloccoN = themeXML.selectSingleNode("theme/operation[@name="""&replace(replace(str_titolo, "{@", ""), "}", "")&"""]")
						if bloccoN is Nothing then
							Set bloccoN = themeXML.selectSingleNode("theme/operation[@name=""blocco""]")
						end if
					else
						Set bloccoN = themeXML.selectSingleNode("theme/operation[@name=""blocco""]")
					end if
                    call render(bloccoN.text)
                    objRS.MoveNext
                loop
            end if
        end if
        Set bloccoN = Nothing
    End sub 
    '            ___________________________________________
    '           /                                           \
    '---------- | SUB PER LA VISUALIZZAZIONE COLONNA MODULI  |----------------------------------+
    '           \___________________________________________/                    
    '
    ' Questa sub viene richiamata della funzione del tema scelto per visualizzare la colonna che conterrà i moduli
    '                       
    Sub ColonnaCentro()
        'Recupero il nodo XML realativo alla routine dei moduli
        Set moduloN = themeXML.selectSingleNode("theme/operation[@name=""modulo""]")
        call render(moduloN.text)
        Set moduloN = Nothing
    End sub
    
    '            ___________________________________________
    '           /                                           \
    '---------- | CREAZIONE DELLA PAGINA IN BASE AL TEMA     |----------------------------------+
    '           \___________________________________________/                    
    '
    'Controllo quali colonne di blocchi il modulo selezionato a intenzione o meno di visitare 
    If session("BlocchiDX") = true AND session("BlocchiSX") = true then
        Call creaStruttura("Struttura") 'La pagina ha entrambe le colonne di blocchi
    elseif session("blocchiDX") = false AND session("BlocchiSX") = false then
        Call creaStruttura("SenzaBlocchi") 'La pagina non ha blocchi
    elseif session("blocchiDX") = true AND session("BlocchiSX") = false then
        Call creaStruttura("BlocchiDX") 'La pagina ha la sola colonna destra di blocchi
    elseif session("blocchiDX") = false AND session("BlocchiSX") = true then
        Call creaStruttura("BlocchiSX") 'La pagina ha la sola colonna sinistra di blocchi
    end if


    '            ___________________________________________
    '           /                                           \
    '---------- |             RILASCIO OGGETTI               |----------------------------------+
    '           \___________________________________________/                    
    '
    'In questa fase rilascio tutti gli oggetti istanziati inizialmente
    Set multilingua = Nothing
    Set objFSO = Nothing
    Set objFolder = Nothing
    'Passaggio dati alle statistiche
    session("vis") 	= timer()  			'Salvo una variabile che mi avverte che il container banner è stato visualizzato
    session("pagetime")	= cdbl(left(Timer - lngTimer,4))'Calcolo i millesecondi impiegati dalla pagina per il caricamento.
%>
<% if request.QueryString("modulo") <> "ajax" and request.QueryString("file") <> "inc_container" then %>
<script language="javascript" src="include/inc_monitorize.asp?modulo=<%=foldName%>&amp;file=<%=moduloFile%>&amp;idpage=<%=request.QueryString("idpage")%>" type="text/javascript"></script>
<% 
end if 
call closeDB()
%>
</body>
</html>
